Язык технологического программирования TechnoC v2.1.10 /2018-03-22/ Copyright (C) 2004-2018 НТФ "Инкотех" Что нового в TechnoC v2.1.10 (в сравнении с v2.1.9)? [ История: ] [ ! Существенное улучшение ] [ + Добавленная функциональность ] [ * Исправлена/изменена функция ] [ - Исправлена ошибка (надеемся) ] ---- История изменений ------------------------------------------------------ [-] Исправлена ошибка: - переход в обратном направлении Shift+F4 по списку ошибок и предупреждений в окне Output - при переходе к месту ошибки в тексте программы по клику мышкой в окне Output не выполнялся сброс выделенного фрагмента программы и дальнейший первый переход вверх/вниз по исходному тексту иногда выполнялся некоррктно [+] Добавлена настройка - количество суток хранения LOG-файлов (0..731) дней [*] Оптимизирован код, убран лишний ScrollBar в окне OutputWindow [*] При открытии файла из папки, отличной от текущей папки проекта, запоминается последняя папка и следующее открытие файла выполняется из запомненной папки [+] Добавлен рестарт контроллера при превышении на протяжении указанного времени предельного значения загрузки процессора контроллера [*] Поправлен механизм принятия решения о переключении ACTIVE-PASSIVE при работе в дублированном режиме [+] В исходный язык добавлены стандартные макросы преобразования временных параметров в секунды для дня, часа и минуты (DAY_S, HOUR_S, MINUTE_S). Например, DAY_S (2) эквивалентно выражению 24 * 60 * 60 * 2, HOUR_S (2) - соответственно 60 * 60 * 2, MINUTE_S (2) - соответственно 60 * 2 [+] Помимо хранения файлов состояния (ST-файлов) на FLASH диске добавлена возможность хранения файлов состояния в статической (SRAM) памяти контроллера и одновременного хранения файлов состояния в статической памяти контроллера и на FLASH диске (SRAM+DISK) [+] Добавлены функции работы со временем: FileTimeToUnixTime, UnixTimeToFileTime, VariantTimeToUnixTime, VariantTimeToLocalUnixTime, UnixTimeToVariantTime, LocalUnixTimeToVariantTime, UnixTimeToSystemTime, LocalUnixTimeToSystemTime, SystemTimeToUnixTime", SystemTimeToLocalUnixTime [+] Добавлена возможность связывания одноименных полей структур со структурами ViSA. [+] Добавлена возможность связывания строковых переменных и полей с массивами char[]. [+] Добавлена поддержка новых модулей ICP DAS: I-8014, I-8046, I-8084, I-87028, I-87037, I-87042, I-87059, I-87061 [+] Добавлена поддержка устройств Modbus TCP [+] Добавлена поддержка устройств U-Remote [+] Для устройств Modbus добавлена настройка dataformat, определяющая порядок байтов в области данных. Возможные значения параметра motorola (bigendian) или intel(littleendian). По-умолчанию используется тип данных motorola (bigendian) [+] В описании устройств добавлена настройка failchecktime - период проверки (обнаружения) устройств, находящихся в состоянии FAILED. По умолчанию параметр равен 10000 мсек. [-] Поправлена ошибка записи значений AO float по Modbus протоколу [*] Оптимизирован процесс обновления device.ini файлов, убрана потенциальная ошибка [*] Исправлен механизм внутреннего присваивания нового задания для ФБ FB_PI_CHECK и FB_PID_CHECK 2.1.9 [-] Исправлена ошибка: - при открытии программы не восстанавливался список истории проектов (Recent Projects); [-] Исправлена ошибка, связанная с выбором задачи при наличии снесенных переменных [+] Для устройств типа STAHL_IS1 добавлено чтение статуса канала для DI [+] Для Modbus устройств можно задавать тип данных канала: long, ulong, int, uint, short, ushort, int64, float, float_0123, float_2301, float_1032, float_3210 [*] Перед разбором файла описания устройств делаем сброс синтаксического анализатора в начальное состояние. [+] Добавлена возможность включать/отключать предупредительные и предаварийные границы [+] В исходный язык добавлена функция Integral (интегрирование по Симпсону) 2.1.8 [-] Исправлена ошибка: - падение приложения при завершении программы; - падение приложения при открытии проекта и позиционировании курсора в окне в позиции, превышающей размер файла, когда файл был изменен извне; - при сохранении файлов иногда блокировался временный файл (проблема в CMirrorFile библиотеки MFC) [-] Исправлена ошибка применения таймера в структуре, содержащей элементы int64 и double [-] Исправлена ошибка компиляция функции StatusImport для double и int64 [-] Исправлена ошибка зацикливания программы .run при некоторых перегрузках программы или device.ini на контроллерах ATOM [-] Исправлена ошибка, связанная с изменением значений коэффициентов функционального блока. Ошибка проявлялась, если после сноса ФБ вызывалась на просмотр другая переменная, а потом менялся коэффициент. Изменение коэффициента выполнялось, но интерпретатор в качестве имени изменяемого ФБ печатал часть имени снесенной перед этим переменной [-] Исправлена ошибка, связанная с #NOUSED. [-] Исправлена ошибка, связанная с выполнением функции Assert. [-] При обновлении файла описания устройств (device.ini) восстанавливались "мусорные" значения выходных каналов. Должны восстанавливаться только форсированные (принудительно установленные) пользователем значения для выходных каналов [-] При записи отсутствующих границ границы инициализировались нулями [+] Добавлена возможность фиксации события по изменению значения переменной. Раньше был только останов по изменению значения переменной [+] В исходном языке функция FormatStr расширена типами формата %lw и %lW; %lw - параметр типа int64 представляет собой число миллисекунд и печатается в виде: ddd.hh:mm:ss.xxx - ddd (дни), hh (часы), mm (минуты), ss (секунды), xxx (миллисекунды) %lW - параметр типа int64 представляет собой число секунд и печатается в виде: ddd.hh:mm:ss - ddd (дни), hh (часы), mm (минуты), ss (секунды) [+] В исходном языке функция TableSearch расширена дополнительным необязательным параметром cnt - реальное число пар значений в таблице нелинейности [+] В исходный язык добавлена стандартная функция FindArray для поиска значения в массиве [+] В исходный язык добавлена стандартная функция MakeInt64 для формирования значения int64 из 2-х long [+] В исходный язык добавлена стандартная функция Average для получения средней величины нескольких переменных (до 32 переменных) [+] В исходный язык добавлена стандартная функция GetListClient для получения списка текущих клиентов, открывших сеансы связи с интерпретатором [+] В исходный язык добавлена стандартная функция PutValueByNameFB для изменения значений коэффициентов функциональных блоков по строковым именам блока и коэффициента [+] В исходный язык добавлена стандартная функция PutKoeff для изменения значений коэффициентов текущего функционального блока по идентификатору коэффициента [+] В исходный язык добавлена стандартная функция UIntToFloat для преобразования unsigned в float [+] В исходный язык добавлена стандартная функция StrCmp, эквивалентная функции C++ strcmp [+] В исходный язык добавлена стандартная функция CurrentStackTmpString для определения текущего размера стека для операций катенаций с переменными типа string [+] В исходный язык добавлена стандартная функция CurrentStackFunString для определения текущего размера стека для операций с функциями, которые возвращают string [+] В исходный язык добавлена возможность задания селекторной ссылки в качестве фактического параметра в виде { : ref1, ... , : refN, default : ref} 2.1.7 [!] переведен на UNICODE [*] добавлена настройка инструментов пользователя [-] исправлен ряд ошибок [!] Для создания инсталляции SCADA ViSA использована UNICODE версия инсталлятора NSIS. Теперь инсталляция на разных языках выполняется корректно в операционных системах с разными языками. [!] В исходный язык добавлен тип 64-разрядных миллисекундных таймеров 'timer64'; функции для работы с ними аналогичны типам данных 'int64': Int64 и TestInt64. Кроме того, функции SetPlusTimer и SetMinusTimer применяются одинаковым образом к типам данных 'timer' и 'timer64'. Для изменения или анализа признака запуска 'timer64' аналогично с 'timer' используется атрибут '.Run' [-] Исправлена ошибка, связанная с изменением размера буфера сообщений. [!] Интерпретатор локализован для контроллеров с архитектурой ARM. [*] Исправлен механизм слежения текущего значения задания (SPA) за параметром SP [-] Исправлено поведение функционального блока FB_PID_CHECK в зоне нечувствительности [+] Для программы с номером 255 добавлены переменные TcCfg и TcCur типа string, содержащие соответственно путь к файлу tc.cfg и имя текущей конфигурации [*] При передаче дискретной переменной из программы на TC в переменную OPC клиента, тип которой отличается от BOOL, в переменную OPC клиента ранее записывалось значение -1 (0xFFFF) в качестве TRUE. Теперь записывается 1. [+] В исходный язык для оператора 'switch' добавлена возможность ветвления по 64-разрядным целым константам, определяемых в операторах 'case'. Для этого необходимо применять конструкцию типа switch(Int64(<64-разрядное целое выражение>)) {....} [+] В исходный язык для оператора 'switch' добавлена возможность ветвления по 64-разрядным вещественным константам, определяемых в операторах 'case'. Для этого необходимо применять конструкцию типа switch(Double(<64-разрядное вещественное выражение>)) {....} [+] В исходный язык для оператора 'switch' добавлена возможность ветвления по 32-разрядным вещественным константам, определяемых в операторах 'case'. При этом в операторе case вещественное число можно задавать без десятичной точки, например, case 1: или case 1.0; допускается возможность задания диапазона case -2.56 ... +100.13, который означает интервал -2.56 <= value <= +100.13. [+] В исходный язык добавлены операторы #NOVISIBLE_FUNC и #VISIBLE_FUNC, предназначенные для игнорирования определенных функций или функциональных блоков в dll-библиотеках, загружаемых на выполнение по оператору #DLL. Это позволит переопределять функции библиотеки своими программными реализациями, а также решить проблему дубликатных имен в нескольких загружаемых библиотеках [+] В исходный язык добавлены стандартные 'легковесные' функции Trig, RTrig и FTrig, по своей сути аналогичные стандартным функциональным блокам FB_TRIG, FB_RTRIG и FB_FTRIG, но выполняющиеся быстрее этих блоков [+] В исходный язык добавлена возможность записи вещественных чисел типа 'float' и 'double' в виде их двоичного шестнадцатиричного представления: 0Xpppppppp#F для числа типа 'float' или 0Xpppppppppppppppp#D для числа типа 'double' (здесь символом 'p' обозначена шестнадцатиричная цифра). Именно в такой двоичный вид преобразуются определения 'const float' и 'const double', чтобы избежать потери точности, наблюдаемой при символьном преобразовании. Другое использование такого двоичного представления вещественных чисел удобно в случае, когда исходные данные не доступны в символьном виде [+] В исходный язык добавлены стандартные функции преобразования вещественных значений в символьный шестнадцатиричный вид: string XFltToStr(float val); string XDoubleToStr(double val); Функция XFltToStr возвращает результат в виде '0Xpppppppp#F'. Функция XDoubleToStr возвращает результат в виде '0Xpppppppppppppppp#D'. Здесь символом 'p' обозначена шестнадцатиричная цифра [+] В исходный язык добавлены стандартные функции возведения в куб Cube и извлечения кубического корня Cbrt: long Cube(long val); float Cube(float val); int64 Cube(int64 val); double Cube(double val); long Cbrt(long val); float Cbrt(float val); int64 Cbrt(int64 val); double Cbrt(double val); [+] В исходный язык добавлена стандартная функция Interpolation, которая выполняет одномерную интерполяцию по итеративной схеме Эйткена [+] В исходный язык добавлены стандартные функции для разбора и формирования произвольной двоичной информации: GetVarChar, PutStructChar, PutCharChar, PutIntChar, PutInt64Char, PutLongChar, PutFloatChar, PutDiscreteChar, PutAnalogChar, PutAnalogAlmChar, PutDoubleChar, PutTimerChar, PutTimer64Char, PutStringChar [-] Устранена ошибка кодогенерации [+] В отладчике добавлена возможность перехода к оператору программы, который сгенерировал ошибочную ситуацию (деление на ноль, нарушение индекса массива и т.д.), при помощи двойного щелчка мыши на соответствующем сообщении [*] использует в качестве хранилища технологических сообщений базу данных SQLITE 3 вместо Berkeley DB 4.5 [-] После обновления программы в контроллерах восстанавливается предыдущая позиция в исходных файлах [-] Устранена ошибка обновления не текущей программы [-] исправлена работа с устройством I-7080 фирмы ICPDAS 2.1.6 [-] В отладчике исправлены ошибки при просмотре информации в окнах при изменении размеров окон отладчика [-] В отладчике более комфортно для глаз проводится изменение размеров его окон [-] В компиляторе и интерпретаторе исправлены ошибки, связанные с реализацией оператора try ... catch [+] В отладчике при щелчке правой кнопки на элементе языка (служебное слово или макрооператор) вызывается помощь по языку TC50; эта помощь требует доработки - необходимо добавить туда поиск по таким элементам [+] В драйвер устройств ввода/вывода добавлена возможность работы с переменными типа 'double' [!] В отладчике по Shift+F2 во время останова программы можно получить трассировку операторов (до 128 операторов), выполненных к моменту останова; кроме того, печатается информация о размере стека задачи и величине занятой области стека [+] При получении состояния задач (по Alt+'i') дополнительно передается информация о занятых блоках динамической памяти (эта же информация фиксируется в log-файле интерпретатора), а также IP-адреса клиентов, подключенных к интерпретатору. Кроме того, в состоянии задач формируется информация о символьных метках выполненных функций MessName и отключенных секциях программы [+] В исходный язык добавлена функция 'long GetLoadFreeBlock(void)', которая возвращает объем в байтах динамической памяти, занятой в данный момент интерпретатором [!] В исходный язык добавлен цикл типа 'foreach', который позволяет перебирать элементы не только массивов, но и таких 'немассивных' данных, как все секции или функциональные блоки [+] В исходный язык добавлен оператор #NOMESS_OPTIM (по умолчанию нет оптимизации сообщений) и #MESS_OPTIM (есть такая оптимизация). Задание оптимизации означает, что для функции MessName в случае отсутствия перерыва в выводе сообщения не вычисляются параметры сообщения и функция сразу завершает свое выполнение. Тем самым в большинстве случаев происходит существенное ускорение выполнения функции MessName, т.к. параметры функци MessName не вычисляются и не передаются через стек [!] В исходный язык добавлен тип 64-разрядных вещественных чисел 'double' и функции для работы с ними: Double и TestDouble [!] В исходный язык добавлен тип 64-разрядных знаковых целых чисел 'int64' и функции для работы с ними: Int64 и TestInt64 [+] В исходный язык добавлена возможность не употреблять служебное слово 'struct' при объявлении соответствующих структурных объектов, т.е. два следующих фрагмента программы а) и б) будут эквивалентными: а) // Определение типов структур struct STR1 {int a, b}; struct STR2 {float x, y; struct STR1 z;}; ... // Объявление структурных объектов struct STR1 n1, n2[20]; struct STR2 n3; б) // Определение типов структур struct STR1 {int a, b}; struct STR2 {float x, y; STR1 z;}; ... // Объявление структурных объектов STR1 n1, n2[20]; STR2 n3; 2.1.5 [+] : Добавлена диагностическая переменная "TrialVersion". Если её значение не равно нулю, это означает, что сервер работает в демонстрационном режиме. [+] : Исправление ошибки: RunTcGetAddrByName DEADLOCK. [*] : Поддержка работы ключей HASP HL, обратно совместимая с HASP4. [!] В отладчике добавлена возможность просмотра 'мгновенного снимка' глобальных данных и коэффициентов функциональных блоков всех текущих программ в виде дерева; аналогично есть возможность автономного просмотра таких снимков (созданных по директиве 'I' чтения состояния контроллера в виде файлов с расширением ".glb") при помощи программы ViewTreeGlbTC50.exe [!] В отладчике добавлена возможность изменения размеров его основных окон отображеня [!] В отладчике добавлена возможность получения списка заблокированных технологических переменных и динамических коэффициентов функциональных блоков для всего проекта, для чего в меню, вызываемому по F10, добавлена соответствующая позиция СПИСОК ЗАБЛОКИРОВАННЫХ ПЕРЕМЕННЫХ; аналогичная информация сохраняется в файлах с расширением .blk по команде Alt+I [!] В отладчике добавлена возможность для проекта, состоящего только из интерфейсов localhost, останавливать и вновь запускать задачи без использования startup.exe [!] В интерпретаторе добавлена возможность сохранения наиболее важных событий функционирования системы управления в символьном файле runtc.log, который располагается в директории, определенной параметром PATH_LOG; к таким событиям, в частности, относятся события очередного запуска или останова интерпретатора, события по перегрузке задач или устройств ввода/вывода, события по ручному переключению активности контроллеров. Содержимое файла runtc.log передается в отладчик по команде СОСТОЯНИЕ КОНТРОЛЛЕРОВ [+] В исходный язык добавлена возможность применения конструкции '... goto default' внутри switch, содержащего 'default' [+] В исходный язык добавлена возможность применения конструкции '... goto case 12' или '... goto case "символьное выражение"' внутри switch, содержащего соответствующий case [+] Для выбора имен файлов с исходными программами наряду с операцией F3 добавлена аналогичная возможность при помощи щелчка мыши на титульной строке отладчика [+] Для выбора имени диска или узла контроллера в менеджере файлов наряду с операциями Alt+F1, Alt+F2, Ctrl+F1 и Ctrl+F2 добавлена аналогичная возможность при помощи щелчка мыши на имени диска или узле контроллера [-] Исправлена ошибка runtcopc сервера, проявлявшаяся при превышении количества используемых переменных количества тегов, прописанных в лицензии [-] Исправлена ошибка TCIDE, проявлявшаяся при отображении всплывающих подсказок в операционной системе Windows 2003 SP1 в профиле пользователя с ограниченными правами 2.1.4 [+] В конфигурационном файле tc.cfg добавлена возможность задавать комментарий к проекту [+] В интегрированной среде разработки поддержан переход в файле по номеру строки [+] В интегрированной среде разработки появилась возможность выборки отдельных задач при компиляции проекта [+] В интегрированной среде разработки при просмотре свойств файла добавлена информация о расположении этого файла, его размере в количестве строк и байтов, а также о дате создания файла [+] В интегрированной среде разработки добавлена реакция на внешнее изменение файлов проекта [+] В интегрированной среде разработки добавлена возможность преобразования всех символов выделенного блока в прописные (Ctrl+Shift+U) или строчные (Ctrl+U) символы [+] В язык ТехноСи добавлена возможность дублирования явно заданной символьной строки, например, запись строки в виде "abc "(3) эквивалентна записи строки в виде "abc abc abc " [+] В язык ТехноСи добавлена возможность передачи в качестве формального параметра произвольного символьного выражения следующим образом. Если функция описана с формальным параметром как char &p[1], то в качестве фактического параметра можно передавать не только ссылку на любой символьный массив, но и произвольное символьное выражение (имеется в виду нечто вроде A + "bbbb" + D). Именно длина, равная 1, говорит о такой возможности. Для любой другой длины в качестве фактического параметра допускается только соответствующая ссылка. При этом надо учитывать, что длина вычисляемого символьного выражения не должна превышать длину переменной string. [+] В язык ТехноСи добавлена возможность вычисления возвращаемого значения функции в виде произвольного символьного выражения следующим образом. Если функция описана с возвращаемым значением как char [1]&func(...), то в качестве результата функции можно возвращать не только ссылку на любой символьный массив, но и произвольное символьное выражение (имеется в виду нечто вроде A + "bbbb" + D). Именно длина, равная 1, говорит о такой возможности. Для любой другой длины в качестве результата функции допускается только соответствующая ссылка. При этом надо учитывать, что длина вычисляемого символьного выражения не должна превышать длину переменной string. [+] В язык ТехноСи добавлена возможность объявления приватными не только глобальные данные, но и секции. [+] В языке ТехноСи операция PRIVATE_FUNCTIONAL_BLOCK теперь распространяется не только на статические функциональные блоки, но и на динамические. [+] В отладчике добавлена возможность чтения имени текущего выполняемого функционального блока в момент останова внутри этого функционального блока; это реализуется при задании имени переменной в виде одного символа '~' для просмотра (по Alt+F6) или же при нажатии на клавишу '~'. [!] В отладчике добавлена возможность выполнения скриптов по изменению значений глобальных переменных и коэффициентов функциональных блоков (как статических, так и динамических) [!] Добавлена функция FormatStrNum, у которой форматная строка может быть не только явно заданной символьной строкой (как это требуется для функции FormatStr), но и динамическим символьным выражением; при этом спецсимволы подстановки определяются в виде %1, %2 и так далее; таким образом, функция FormatStrNum является аналогом API-функции Windows FormatMessage [!] Добавлена функция Scanf, которая является аналогом API-функции Windows sscanf [!] Добавлена функция FirstArrival, которая позволяет самостоятельно отслеживать перерывы в выдаче технологических сообщений [!] Добавлены функции DisableWrite и EnableWrite, которые позволяют динамически в контроллере устанавливать/снимать запрет на запись в глобальные переменные со стороны системы отображения [!] Добавлены функции FileTimeToLocalFileTime, FileTimeToSystemTime, FindFirstFile, FindClose, FindNextFile, SetFileAttributes, GetFileAttributes, которые являются аналогами соответствующих API-функции Windows [!] Добавлена функция MinMax, которая позволяет одновременно получить минимум и максимум [+] Функция RunStr теперь может изменять значения не только глобальных переменных, но и коэффициентов функциональных блоков (как статических, так и динамических) [!] Разработана утилита MAKE_SCRIPTS, которая на основе конфигурационного файла tc.cfg автоматически генерирует все скрипты для загрузки по FTP протоколу необходимых файлов в контроллеры [!] Добавлена возможность автоматического запуска многоконтроллерного проекта для его отладки [!] Добавлена локализация литовского и английского языков [-] В интегрированной среде разработки исправлены некоторые ошибки [+] В отладчике добавлена возможность просмотра информации об обмене драйвера устройств ввода/вывода отдельно с каждым устройством - число запросов, ответов и потерянных пакетов [-] В драйвере устройств ввода/вывода исправлены некоторые ошибки по работе с устройствами I-8000 и по протоколу Modbus ASCII 2.1.3 [+] Используется параметр CODE_PAGE из файла tc.cfg при выдаче технологических сообщений. [!] В настройках задачи появилась возможность задавать список внешних макроимен [!] В язык ТехноС добавлена макропеременная __CONFIGURATION__, которая содержит название текущей компилируемой конфигурации. Для анализа содержимого __CONFIGURATION__ возможно применение макрооператора следующего вида: #if __CONFIGURATION__ == "Debug" или #if __CONFIGURATION__ != "Debug" [+] В интегрированной среде разработки поддержан просмотр/изменение списка внешних макроимен [!] В интегрированной среде разработки поддержан выбор активной конфигурации. Все изменения в активной конфигурации сохраняются в ней и не затрагивают остальных конфигураций [-] В интегрированной среде разработки исправлены некоторые ошибки [+] В интерпретатор добавлен контроль на недопустимость изменения явно заданных символьных строк [+] В отладчике добавлена возможность выбора для просмотра переменной, содержашейся на произвольном уровне доступа структуры, т.е. для выбора переменной D из записи A.B[1].C.D достаточно щелкнуть мышью на символе D [!] Добавлена функция RunStr для динамической инициализации глобальных данных; сценарий инициализации задается в символьном виде, аналогичном инициализации переменных в языке ТехноС. Данная функция предназначена для изменения значений нескольких переменных или структур через OPC-сервер в виде одного символьного запроса [!] Реализованы чтение/запись массивов в одном запросе. Поддержка атрибута collapsed для массивов [-] Исправление ошибки при разборе ItemID 2.1.2 [!] Появилась возможность определения функций, у которых параметры могут быть значениями по умолчанию [!] В отладчике появилась возможность получения обзорной перекрестной информации о переменных программы [!] Для системы программирования можно задавать несколько разных конфигураций разработки проекта [+] В качестве опущенного параметра возможно задание одиночной структуры [+] Операцию "запятая" можно использовать в тернарных операциях [*] В драйвере устройств ввода/вывода для устройств типа MODBUS допускается задание адресов каналов в диапазоне 0...0xFFFF (было 0...10000); исправлена ошибка позиционирования в случае использования блоков с пользователь скими функциями (было смещение на 1 строку); компилятору передается дополнительная информация для создания файлов с browse информацией; в случае невозможности открытия последовательного порта (указано неверное имя или порт отсутствует в системе) в фдайвере все равно создается соответствующий класс порта, а устройствам (и их каналам) на этом порту устанавливается признак FAILURE [-] В интегрированной среде разработки исправлены некоторые ошибки 2.1.1 [+] В справочной информации о результате компиляции содержатся данные о числе каналов ввода/вывода; каналы разделены по типам использования (ввод/вывод, аналоговые/дискретные/счетчики/генераторы импульсов) [+] Добавлены функции для работы с календарными датами в виде unsigned long в диапазоне от 1970-01-01-00:00:00 до 2106-02-07-06:28:15 [+] В синтаксис языка добавлена возможность чтения бита по его номеру [*] Длина строки исходной программы увеличена до 2500 символов [!] В синтаксис языка добавлена возможность задания макросов (#define) с параметрами [*] В случае зацикливания программы, повторяющегося подряд более 5-ти циклов задачи, происходит отключение секции, в которой обнаружено зацикливание. При этом выдается соответствующее сообщение [+] Добавлен функциональный блок FB_PID_CHECK [*] В функциональном блоке FB_PI_CHECK параметры InP (параметр), InN (задание) и OutN (действительное задание) переименованы соответственно в PV, SP и SPA [*] Устранено периодическое переключение активности контроллеров в дублированном режиме в состоянии коллизии [+] При выборе имени файла в окне отладчика, заданного в #include, при помощи щелчка левой кнопки мыши или нажатия клавиши F6 происходит переход к просмотру выбранного файла [+] При нажатии клавиши Ctrl+Tab в окне отладчика происходит циклическое переключение между двумя последними выбранными файлами [+] В основное меню отладчика, вызываемое по клавише F10, добавлены операции: 1) ПРОВЕРКА PING - для динамического отображения наличия связи со всеми узлами проекта 2) ИНФОРМАЦИЯ О ЧИСЛЕ КАНАЛОВ В/В - для получения информации о числе каналов ввода/вывода для всех узлов проекта; каналы разделены по типам использования (ввод/вывод, аналоговые/дискретные/счетчики/генераторы импульсов) [+] В интегрированной среде разработки добавлена возможность открытия криптованных файлов с исходными кодами [-] В OPC-сервере исправлены некоторые ошибки и выполнены оптимизации [-] Исправлена ошибка компиляции криптованных исходных кодов [-] В интегрированной среде разработки исправлены некоторые ошибки